//
//  WTNetworktools.swift
//  WTSinaWeibo
//
//  Created by  Wellim on 16/6/26.
//  Copyright © 2016年  Wellim. All rights reserved.
//

import UIKit
import AFNetworking

enum MethodType :String{
    case GET = "GET"
    case POST = "POST"
}

class WTNetworktools: AFHTTPSessionManager {
    /// 单例
    static let sharedNetworktools: WTNetworktools = {
    
    let tools = WTNetworktools()
        
    tools.responseSerializer.acceptableContentTypes?.insert("text/plain")
    
    return tools
        
    }()
    
    /**
     请求数据方法
     
     - parameter method:     方式
     - parameter urlString:  url
     - parameter parameters: 参数
     - parameter success:    成功
     - parameter failure:    失败
     */

    func request(method:MethodType,urlString:String,parameters:AnyObject?,success:(resposnse:AnyObject?)->(),failure:(error:NSError)->()) {
        
        if method == .GET {
       
     self.GET(urlString, parameters: parameters, progress: nil, success: { (_, res) in
        
        success(resposnse: res)
        
        }, failure: { (_, err) in
           failure(error: err)
            
     })
            
        }else{
        
        self.POST(urlString, parameters: parameters, progress: nil, success: { (_, res) in
            success(resposnse: res)
            
            }, failure: { (_, err) in
                
            failure(error: err)
       
        })
        
        }
        
    }
    
}

extension WTNetworktools{

    /**
       请求token
     */
    func oauthLoadUserAccount(code: String,success:(resposnse:AnyObject?)->(),failure:(error:NSError)->()){
    
        let urlSting = "https://api.weibo.com/oauth2/access_token"
        
  /*
         
         client_id	true	string	申请应用时分配的AppKey。
         client_secret	true	string	申请应用时分配的AppSecret。
         grant_type	true	string	请求的类型，填写authorization_code
         
         grant_type为authorization_code时
         必选	类型及范围	说明
         code	true	string	调用authorize获得的code值。
         redirect_uri	true	string	回调地址，需需与注册应用里的回调地址一致。
         
   */
        let parameters = [
        
            "client_id" : AppKey,
            "client_secret" : AppSecret,
            "grant_type" : "authorization_code",
            "code":code,
            "redirect_uri": Redirect_URI
        ]
        
    
       self.request(.POST, urlString: urlSting, parameters: parameters, success: success, failure: failure)
    
   }
    
    
    /**
     请求个人信息数据
     */
    func oauthLoadUserInfo(userAccount:WTUserAccount,success:(resposnse:AnyObject?)->(),failure:(error:NSError)->()){
    
        let urlString = "https://api.weibo.com/2/users/show.json"
        
      /*
         access_token	true	string	采用OAuth授权方式为必填参数，OAuth授权后获得。
         uid	false	int64	需要查询的用户ID。
        */
        let parameters = [
          
            "access_token":userAccount.access_token!,
            "uid":userAccount.uid!
        
        ]
        
    
       self.request(.GET, urlString: urlString, parameters: parameters, success: success, failure: failure)
        
    }
    
    /**
     请求首页的数据
     */
   
    func HomeloadDate(sinceId:Int64, maxId: Int64,success:(resposnse:AnyObject?)->(),failure:(error:NSError)->())  {
         // 请求url
        let urlString = "https://api.weibo.com/2/statuses/home_timeline.json"
        // 请求参数
        // accessToken!  因为如果没有登录的话 根本就不会进行到请求数据 所以可以强行解包
        let parameters = [
        
           "access_token":WTUserAccountTools.sharedUserAccountTools.accessToken!,
            "since_id":"\(sinceId)",
            "max_id":"\(maxId)"
            
        ]
        //        since_id	false	int64	若指定此参数，则返回ID比since_id大的微博（即比since_id时间晚的微博），默认为0。
        //        max_id	false	int64	若指定此参数，则返回ID小于或等于max_id的微博，默认为0。
        // 发送请求
        
        request(.GET, urlString: urlString, parameters: parameters, success: success, failure: failure)
        
        
    }

}

// 发布微博界面
extension WTNetworktools{
 
func composeUpdate(status: String,success:(resposnse:AnyObject?)->(),failure:(error:NSError)->())  {
        
        let urlString = "https://api.weibo.com/2/statuses/update.json"
        let parameters = [
            "access_token" : WTUserAccountTools.sharedUserAccountTools.accessToken!,
            "status" : status
         ]
        
        request(.POST, urlString: urlString, parameters: parameters, success: success, failure: failure)


    }
    
    // 发送带有图片的微博
    func composeUpload(status:String,imageList:[UIImage],success:(resposnse:AnyObject?)->(),failure:(error:NSError)->())  {
        // 请求url
        let urlString = "https://upload.api.weibo.com/2/statuses/upload.json"
        
        let parameters = [
        
          "access_token":WTUserAccountTools.sharedUserAccountTools.accessToken!,
          "status":status
        
        ]
        
        // 以表单形式提交（拼接到表单后面提交）
        /*
         data : 将要上传到服务器的二进制文件
         name : 服务器要求规定好文件名称(协议)
         fileName:  上传文件完成后保存到服务器的文件路径 （新浪微博不需要你指定 都会按着自己的方式保存到响应的文件夹中）--- 随意传
         mimeType: 指定上传的二进制文件的格式 application/octet-stream 忽略上传文件的格式
         如果指定为图片 image/jpeg （大类型/ 小类型）
         */
       
        
        POST(urlString, parameters: parameters, constructingBodyWithBlock: { (AFMultipartFormData) in
            
            for image in imageList {
                // image 转二进制
                let data = UIImagePNGRepresentation(image)!
                
                AFMultipartFormData.appendPartWithFileData(data, name: "pic", fileName: "oooo", mimeType: "application/octet-stream")
                
                }

            }, progress: nil, success: { (_, response) in
                
                success(resposnse: response)
                
            }) { (_, erro) in
                
                failure(error: erro)
        }
        
      }
    
    
    

}

